<?php

namespace App\Http\Controllers\Admin\Permission;

use App\Http\Controllers\Controller;
use App\Models\SystemAdmin;
use App\Traits\Controllers\AdminTraits;
use App\Traits\Controllers\UpdateStatusTraits;
use App\Transformers\System\SystemAdminTransformer;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;

class SystemAdminController extends Controller
{
    //管理员的增删改查
    use AdminTraits;
    use UpdateStatusTraits;

    //定义模型和transformer
    public $model = SystemAdmin::class;
    public $transformer = SystemAdminTransformer::class;

    /**
     * 参数验证规则
     *
     * @param Request $request
     * @return array
     */
    public function rules(Request $request): array
    {
        switch ($request->method()) {
            case 'GET':
                return [];
                break;

            case 'PATCH':
            case 'POST':
                return [
                    'account' => 'required|min:5|max:16',
                    'password' => 'required|min:8|max:20|confirmed',
                    'real_name' => 'required|min:2|max:16',
                    'roles' => 'required',
                ];
            break;
            case 'PUT':
                return [];
                break;
        }
        return [];
    }

    /**
     * 验证信息
     *
     * @return array
     */
    public function ruleMessages(): array
    {
        return [
            'account.required' => '管理员账号 不能为空',
            'account.min' => '管理员账号 不能少于5个字段',
            'account.max' => '管理员账号 不能多于16个字段',
            'password.required' => '管理员密码 不能为空',
            'password.min' => '管理员密码 不能少于8个字段',
            'password.max' => '管理员密码 不能多于20个字段',
            'password.confirmed' => '管理员密码 两次密码不一致',
            'real_name.required' => '真实姓名 不能为空',
            'real_name.min' => '真实姓名 不能少于2个字段',
            'real_name.max' => '真实姓名 不能多于16个字段',
            'roles.required' => '管理员身份 不能为空',

        ];
    }

    /**
     * 保存
     *
     * @param Request $request
     * @return \Dingo\Api\Http\Response
     * @throws ValidationException
     */
    public function store(Request $request)
    {
        $this->validateData($request);
        // 保存创建人
        $request->offsetSet('system_admin_id', $this->admin_user('id'));

        $model = $this->getQuery()->fill($request->all());
        $model->password = bcrypt($request->input('password'));

        $model->save();
        return $this->response->created();
    }

}
